package com.example.leetcode.prcatice;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 给你一个整数数组 nums ，请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同，请你按照数值本身将它们 降序 排序。 
 *
 * 请你返回排序后的数组。
 *
 *  
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/sort-array-by-increasing-frequency
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Test1636 {


    public int[] frequencySort(int[] nums) {
        Map<Integer,Integer> map = new HashMap<>();
        List<Integer> list = new ArrayList<>();
        for (int num : nums ) {
            list.add(num);
            map.put(num,map.getOrDefault(num, 0 ) + 1);
        }
        List<Integer> sortList = list.stream().sorted((x, y) -> {
            Integer xCount = map.get(x);
            Integer yCount = map.get(y);
            if (xCount < yCount) {
                return -1;
            } else if (xCount > yCount) {
                return 1;
            } else {
                return y -x ;
            }
        }).collect(Collectors.toList());
        int[] r = new int[nums.length];
        for (int i = 0;i<r.length;i++){
            r[i] = sortList.get(i);
        }
        return r;
    }

    public static void main(String[] args) {
        Test1636 t = new Test1636();
        int[] nums = {1,1,-6,4,5,-6,1,4,1};
        int[] ints = t.frequencySort(nums);
        for (int i:ints) {
            System.out.print(i + ",");
        }
    }
}
